﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using Tibet.GUI.Contrato;
using Tibet.Entidades;
using Tibet.Logica.Comandos;
using Tibet.Logica.FabricaLogica;
using Tibet.Logica.Comandos.ComandoMotorMetrica;
using System.Web.UI.WebControls;
using Tibet.Entidades.FabricaEntidades;

namespace Tibet.GUI.Presentador
{
    public class PresentadorModificarPerfilMetricas 
    {
        private IContratoModificarPerfilMetricas _VistaModificarPerfilMetricas;

        private int iDPerfil;
        public bool Estado;

        public PresentadorModificarPerfilMetricas(Tibet.GUI.Contrato.IContratoModificarPerfilMetricas VistaRecibida)
        {
            _VistaModificarPerfilMetricas = VistaRecibida;
        }

        public void ListarMetricas()
        {
            Comando CBuscarMetricas = FabricaComandoMetrica.ObtenerComandoConsultarMetrica();
            CBuscarMetricas.Ejecutar();

            _VistaModificarPerfilMetricas.listaMetricas = CBuscarMetricas.ListaEntidad;
        }

        public void ListarPerfiles()
        {
            Comando CBuscarPerfiles = FabricaComandoMetrica.ObtenerComandoConsultarPerfilMetrica();
            CBuscarPerfiles.Ejecutar();

            _VistaModificarPerfilMetricas.listaPerfiles = CBuscarPerfiles.ListaEntidad;
        }

        public void ListarPerfilesPorNombre(String Nombre)
        {
           
            Comando CBuscarPerfilesNombre = FabricaComandoMetrica.ObtenerComandoBuscarPerfilesPorNombre(Nombre);
            CBuscarPerfilesNombre.Ejecutar();

            _VistaModificarPerfilMetricas.listaPerfiles = CBuscarPerfilesNombre.ListaEntidad;
             
        }

        public void Iniciar()
        {
            ListarPerfiles();
            ListarMetricas();
            CargarCheckBox();
        }

        public void PintarCheckBox(Panel Panel)
        {
            int Contador = 0;
            foreach (Metrica miMetrica in _VistaModificarPerfilMetricas.listaMetricas)
            {
                if (EstaEnLista(miMetrica.IdMetrica))
                { _VistaModificarPerfilMetricas.ListaCheckBox[Contador].Checked = true; }
                Panel.Controls.Add(_VistaModificarPerfilMetricas.ListaCheckBox[Contador]);
                Contador++;
            }
        }

        public void PintarCheckBoxVacios(Panel Panel)
        {
            int Contador = 0;
            CargarCheckBox();
            foreach (Metrica miMetrica in _VistaModificarPerfilMetricas.listaMetricas)
            {
                Panel.Controls.Add(_VistaModificarPerfilMetricas.ListaCheckBox[Contador]);
                Contador++;
            }
        }

        public void CargarCheckBox()
        {
            List<CheckBox> checkBox = new List<CheckBox>();

            foreach (Metrica miMetrica in _VistaModificarPerfilMetricas.listaMetricas)
            {
                CheckBox check = new CheckBox();
                check.Width = 400;
                check.Height = 50;
                check.ID = "checkbox" + miMetrica.NombreMetrica;
                check.Text = miMetrica.NombreMetrica;
                check.Checked = false;
                checkBox.Add(check);
            }
            _VistaModificarPerfilMetricas.ListaCheckBox = checkBox;
        }

        public bool EstaEnLista(int IdMetrica)
        {
            foreach (Metrica MetricasPerfil in _VistaModificarPerfilMetricas.listaMetricasPerfil)
            {
                if (MetricasPerfil.IdMetrica == IdMetrica)
                    return true;
            }
            return false;
        }

        public void PintarDatosSeleccionado(Panel Panel, int NumeroSeleccionado, TextBox LabelNombre)
        {
            PerfilMetrica perfilMetrica = (PerfilMetrica)_VistaModificarPerfilMetricas.listaPerfiles[NumeroSeleccionado];
            iDPerfil = perfilMetrica.IdPerfilMetrica;

            Comando CConsultarProyectosConPerfil = FabricaComandoMetrica.ObtenerComandoConsultarProyectosConPerfil(iDPerfil);
            CConsultarProyectosConPerfil.Ejecutar();

            if (CConsultarProyectosConPerfil.Flag)
            {
                _VistaModificarPerfilMetricas.BloquearBoton(false);
                _VistaModificarPerfilMetricas.Alertar("Este Perfil de Metrica esta siendo usado en proyectos aun sin culminar, no se puede modificar aun", "alertKey");
                LabelNombre.Text = perfilMetrica.NombrePerfilMetrica;
            }
            else
            {
                _VistaModificarPerfilMetricas.BloquearBoton(true);
                LabelNombre.Text = perfilMetrica.NombrePerfilMetrica;
            }

            Comando CBuscarMetricasDePerfil = FabricaComandoMetrica.ObtenerComandoConsultarMetricaDePerfil(iDPerfil);
            CBuscarMetricasDePerfil.Ejecutar();

            _VistaModificarPerfilMetricas.listaMetricasPerfil = CBuscarMetricasDePerfil.ListaEntidad;

            PintarCheckBox(Panel);
        }

        public void PintarLista(GridView gridViewLstaPerfiles)
        {
            gridViewLstaPerfiles.DataSource = _VistaModificarPerfilMetricas.listaPerfiles;//perfiles;
            gridViewLstaPerfiles.DataBind();
        }


        public void ModificarPerfilMetrica(String NombreCuentaNueva, List<Entidad> NuevasMetricas, int NumeroSeleccionado)
        {
            PerfilMetrica perfilMetrica = (PerfilMetrica)_VistaModificarPerfilMetricas.listaPerfiles[NumeroSeleccionado];
            iDPerfil = perfilMetrica.IdPerfilMetrica;
            Comando modificarPerfilMetrica = FabricaComandoMetrica.ObtenerComandoModificarPerfil(iDPerfil, NuevasMetricas, NombreCuentaNueva);
            modificarPerfilMetrica.Ejecutar();
            Estado = modificarPerfilMetrica.Flag;

            //_vistaCrearPerfilMetrica.MostrarMensaje(flag);

        }

        public void FiltrarPorNombre(GridView gridViewLstaPerfiles)
        {
            if (_VistaModificarPerfilMetricas.CampoBusqueda.Equals(""))
                PintarLista(gridViewLstaPerfiles);
            else
            {
                ListarPerfilesPorNombre(_VistaModificarPerfilMetricas.CampoBusqueda);
                PintarLista(gridViewLstaPerfiles);
            }
        }


        internal void SetearListaMetricas()
        {
            _VistaModificarPerfilMetricas.listaMetricasPerfil = new List<Entidad>();
        }

        public List<Entidad> CastearLista()
        {

            List<Entidad> NuevasMetricas = new List<Entidad>();

            foreach (Metrica miMetrica in _VistaModificarPerfilMetricas.listaMetricas)
            {
                foreach (CheckBox check in _VistaModificarPerfilMetricas.ListaCheckBox)
                {

                    if (check.ID.Equals("checkbox" + miMetrica.NombreMetrica))
                        if (check.Checked)
                            NuevasMetricas.Add(miMetrica);
                }
            }

            return NuevasMetricas as List<Entidad>;
        }
    }
}